package com.ljx.designMode.singleMode;

/**
 * @author LJX
 * @Description: 单例模式中的懒汉模式（会出现线程安全问题）[类加载不会导致该单实例对象被创建，而是首次使用该对象时才会被创建]
 * @Date: 2022/11/7 10:33
 * @Version 1.0
 */
public class SingleModeLazy {
	/**
	 * 	从上面代码我们可以看出该方式在成员位置声明SingleModeLazy类型的静态变量
	 * 	并没有进行对象的赋值操作，那么什么时候赋值的呢？
	 * 	当调用getInstance()方法获取SingleModeLazy类的对象的时候才创建singleModeLazy类的对象，
	 * 	这样就实现了懒加载的效果。但是，如果是多线程环境，会出现线程安全问题。
	 *
	 * 	如果在多线程的情况先，可能获取的对象会被多次创建
	 * 	懒汉式---存在线程安全问题---为方法加锁
	 * 	虽然加锁解决了线程安全问题，但是synchronized会导致执行效率变低
	 * 	每次调用该类对象都会走锁
	 * 	从面下代码我们可以看出，其实就是在初始化instance的时候才会出现线程安全问题，一旦初始化完成就不存在了。
	 */
	private static SingleModeLazy singleModeLazy;

	private SingleModeLazy() {
	}

	public static SingleModeLazy getInstance(){
		synchronized (SingleModeLazy.class){
			if(singleModeLazy==null){

				singleModeLazy=new SingleModeLazy();
			}

			return singleModeLazy;
		}

	}
}
